home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / apl / gview120.lzh / gviewsrc.lzh / xpi_load.s < prev    next >
Text File  |  1995-02-12  |  26KB  |  1,452 lines

  1. *****************************************************************************************
  2. *                Pi X68K 16色圧縮                        *
  3. *                Ver 1.05                        *
  4. *                  Loader Module.                        *
  5. *            Copyright (c) 1990,91 やなぎさわ                *
  6. *****************************************************************************************
  7.  
  8. * Ko-Window KoPI.win 用にちょっとだけ書き換えました
  9. * KoPI を 1 にすると完全に元に戻ります。
  10. *    1991 1/22 小笠原博之 SPS-NET: SPS0783 COR.
  11. KoPI        equ    0    * KoPI モードスイッチ
  12. *
  13.  
  14.  
  15. _OPEN        EQU    $ff3d
  16. _CLOSE        EQU    $ff3e
  17. _READ        EQU    $ff3f
  18. _SUPER        EQU    $ff20
  19.  
  20.         .xdef    _PiLoad
  21.         .xdef    _Pi_PaletteBuff
  22. *        .xdef    _ToneSet
  23.  
  24. *////////////////////////////////////////////////////////////////////////////////////////
  25. * int    PiLoad( file, buff, Size, X, Y, Xwid, Ywid , tone, opt)
  26. *
  27. * 引数
  28. *    char    *file    ファイル名
  29. *    short    *buff    バッファのポインタ (展開およびファイルバッファ)
  30. *    int    Size    バッファのサイズ
  31. *    int    X    表示アドレスのX座標
  32. *    int    Y    表示アドレスのY座標
  33. *    int    Xwid    X方向の展開サイズ(負数で省略)
  34. *    int    Ywid    Y方向の展開サイズ(負数で省略)
  35. *    int    tone    とーん(1~100%)
  36. *    int    opt    おぷしょん (下記のビットで指定)
  37. *       (lsb)0 .. パレット設定    する/しない = 1/0
  38. *        1 .. 画面展開        する/しない = 1/0
  39. *        2 .. コメント表示    する/しない = 1/0
  40. *        3 .. 画面設定        する/しない = 1/0
  41. *        (すでに設定ずみの場合は設定しない)
  42. *
  43. * 戻り値
  44. *      0    正常終了
  45. *     -8    バッファが足りない
  46. *    -35    サイズ指定が変
  47. *    -31    パイでは無い
  48. *    -32    サポートされていない
  49. *    他負数    ファイルエラー(HumanのDOSコールエラー参照)
  50. *
  51. * ・Cからそのまま呼び出せます。
  52. * ・描画データはバッファアドレス+2048よりデータが格納されます。
  53. *    (1バイト/1ドット)
  54. * ・パレットはグローバルシンボルの"_PaletteBuff"より格納されます。
  55. * ・呼び出しはユーザ/スーパバイザどちらの状態からでも大丈夫です。
  56. * ・.r 化が可能です。
  57. * ・バッファサイズは X_SIZE*Y_SIZE+2048+3+128 以上必要です。(うぅでかい)
  58. *        (SIZEは表示サイズではなくて、実際のデータのサイズ)
  59. * ・展開サイズは指定したサイズに拡大および縮小されて表示されます。
  60. *  省略した場合のサイズは適当に設定されます。
  61. * ・自己書き換えをしているので注意
  62. *
  63. _PiLoad
  64.         move.l    sp,a1
  65.         movem.l    d3-d7/a3-a6,-(sp)
  66.         lea    data(pc),a6
  67.         move.w    sr,d0
  68.         and.w    #$2000,d0        今がスーパかどうかの判断
  69.         beq    piloada
  70.         bsr    PiLoad
  71.         bra    pi_fin
  72. piloada
  73.         clr.l    -(sp)
  74.         dc.w    _SUPER            スーパーバイザーセット
  75.         move.l    d0,(sp)
  76.         bsr    PiLoad
  77.         move.l    d0,d1
  78.         dc.w    _SUPER            ユーザー
  79.         lea    4(sp),sp
  80.         move.l    d1,d0
  81. pi_fin
  82.         movem.l    (sp)+,d3-d7/a3-a6
  83.         rts
  84. *
  85. PiLoad
  86.         move.l    sp,stk(a6)        大域脱出用
  87.         move.l    4(a1),file_name(a6)
  88.         move.l    8(a1),gbuff(a6)
  89.         move.l    12(a1),buff_size(a6)
  90.         move.l    16(a1),d0        X
  91.         move.l    20(a1),d1        Y
  92.         lea    $c00000,a0
  93.         mulu    #2048,d1
  94.         add.w    d0,d1
  95.         add.w    d0,d1
  96.         add.l    d1,a0
  97.         move.l    a0,addr(a6)
  98.  
  99.         move.l    24(a1),d0        Xwid
  100.         move.w    d0,xwid(a6)
  101.         bmi    piload0
  102.         add.l    16(a1),d0
  103.         cmp.l    #1024,d0
  104.         bgt    size_error
  105. piload0    
  106.         move.l    28(a1),d0        Ywid
  107.         move.w    d0,ywid(a6)
  108.         bmi    piload1
  109.         add.l    20(a1),d0
  110.         cmp.l    #1024,d0
  111.         bgt    size_error
  112. piload1
  113.         move.l    a1,-(sp)
  114.  
  115.         move.l    32(a1),d0
  116.         move.w    d0,tone(a6)
  117.         move.l    36(a1),d0
  118.         move.w    d0,opt(a6)
  119.         move.w    #0,-(sp)        for read
  120.         move.l    file_name(a6),-(sp)
  121.         .dc.w    _OPEN
  122.         addq.l    #6,sp
  123.         move.w    d0,file(a6)
  124.         bmi    file_error
  125.         bsr    color_initialize
  126.         bsr    header_read
  127.  
  128.         move.l    (sp)+,a1
  129.  
  130.         move.w    xwid(a6),d0        再チェック
  131.         add.w    18(a1),d0
  132.         cmp.w    #1024,d0
  133.         bgt    size_error
  134.  
  135.         move.w    ywid(a6),d0
  136.         add.w    22(a1),d0
  137.         cmp.w    #1024,d0
  138.         bgt    size_error
  139.  
  140.         move.w    colum(a6),d0
  141.         lea    rewrite_table(pc),a0
  142. piload2
  143.         move.w    (a0)+,d2
  144.         beq    piload3
  145.         move.w    (a0)+,d1
  146.         add.w    d0,d1
  147.         neg.w    d1
  148.         move.w    d1,2(a6,d2.w)
  149.         bra    piload2
  150. piload3
  151.         add.w    d0,d0
  152.         neg.w    d0
  153.         move.w    d0,pat6-data+2(a6)
  154.         move.w    d0,pat15-data+2(a6)
  155.  
  156.         move.w    colum(a6),d0
  157.         and.w    #1,d0
  158.  
  159.         beq    piload_even
  160.  
  161.         move.b    #OPload_len-patp0-2,patp0-data+3(a6)
  162.         move.b    #OPload_lenx-patp1-2,patp1-data+3(a6)
  163.         bra    piload4
  164. piload_even
  165.         move.b    #Pload_len-patp0-2,patp0-data+3(a6)
  166.         move.b    #Pload_lenx-patp1-2,patp1-data+3(a6)
  167. piload4
  168.         bsr    read_ready
  169.         bsr    expand
  170.     .if KoPI
  171.         btst.b    #3,opt+1(a6)
  172.         beq    piload5
  173.         bsr    set_crt
  174.     .endif
  175. piload5
  176.     .if KoPI
  177.         btst.b    #2,opt+1(a6)
  178.         beq    piload8
  179.         bsr    com_disp        *コメントの表示
  180.     .endif
  181. piload8
  182.     .if KoPI
  183.         btst.b    #0,opt+1(a6)
  184.         beq    piload6
  185.         bsr    set_pal            *パレットをセットする
  186.     .endif
  187. piload6
  188.     .if KoPI
  189.         btst.b    #1,opt+1(a6)
  190.         beq    piload7
  191.         bsr    trans
  192.     .endif
  193. piload7
  194.         move.w    file(a6),-(sp)
  195.         .dc.w    _CLOSE
  196.         addq.l    #2,sp
  197.         rts
  198.  
  199. *---------------------------------------------------------------------------------------*
  200. header_read
  201.         bsr    getc
  202.         cmp.b    #'P',d0
  203.         bne    no_pi
  204.         bsr    getc
  205.         cmp.b    #'i',d0
  206.         bne    no_pi
  207. comment:
  208.         bsr    getc
  209.         cmp.b    #26,d0
  210.         bne    comment
  211. com0
  212.         bsr    getc
  213.         tst.b    d0
  214.         bne    com0
  215.  
  216.         bsr    getc
  217.         cmp.b    #0,d0
  218.         bne    no_support
  219.  
  220.         bsr    getc
  221.         move.w    d0,ritu0(a6)        * 比率
  222.         bsr    getc
  223.         move.w    d0,ritu1(a6)
  224.  
  225.         bsr    getc
  226.         cmp.b    #4,d0
  227.         bne    no_pi
  228.  
  229.         bsr    getw
  230.         bsr    getw            * 機種
  231.  
  232.         bsr    getw            * 機種ユニーク
  233.         subq.w    #1,d0
  234.         bmi    head_read1
  235.         move.w    d0,d1
  236. head_read2
  237.         bsr    getc            * 機種予約
  238.         dbra    d1,head_read2
  239. head_read1
  240.         bsr    getw            * X width
  241.         move.w    d0,colum(a6)
  242.  
  243.         bsr    getw
  244.         move.w    d0,line(a6)        * Y width
  245.         mulu    colum(a6),d0
  246.         addq.l    #1,d0
  247.         and.w    #$fffe,d0
  248.         add.l    #2048+2,d0
  249.         move.l    gbuff(a6),a0
  250.         add.l    d0,a0
  251.         move.l    buff_size(a6),d1
  252.         sub.l    d0,d1
  253.         move.l    d1,d0
  254.         bsr    buffer_set
  255.  
  256.         tst.w    xwid(a6)
  257.         bpl    head_read5
  258.  
  259.         tst.w    ywid(a6)
  260.         bpl    head_read7
  261.         move.w    colum(a6),xwid(a6)
  262.         bra    head_read5
  263. head_read7
  264.         move.w    colum(a6),d0
  265.         mulu    ywid(a6),d0
  266.         divu    line(a6),d0
  267.         move.w    d0,xwid(a6)
  268.  
  269.         move.w    ritu0(a6),d0
  270.         beq    head_read5
  271.         move.w    ritu1(a6),d1
  272.         beq    head_read5
  273.         move.w    xwid(a6),d2
  274.         mulu    d1,d2
  275.         divu    d0,d2
  276.         move.w    d2,xwid(a6)
  277. head_read5
  278.         tst.w    ywid(a6)
  279.         bpl    head_read4
  280.  
  281.         tst.w    xwid(a6)
  282.         bpl    head_read6
  283.         move.w    line(a6),ywid(a6)
  284.         bra    head_read8
  285. head_read6
  286.         move.w    line(a6),d0
  287.         mulu    xwid(a6),d0
  288.         divu    colum(a6),d0
  289.         move.w    d0,ywid(a6)
  290. head_read8
  291.         move.w    ritu0(a6),d0
  292.         beq    head_read4
  293.         move.w    ritu1(a6),d1
  294.         beq    head_read4
  295.         move.w    ywid(a6),d2
  296.         mulu    d0,d2
  297.         divu    d1,d2
  298.         move.w    d2,ywid(a6)
  299. head_read4
  300.         lea    palette(a6),a4
  301.         move.w    #3*16-1,d1
  302. head_read0
  303.         bsr    getc
  304.         move.b    d0,(a4)+
  305.         dbra    d1,head_read0
  306.         rts
  307.  
  308. *---------------------------------------------------------------------------------------*
  309. *    GVRAMへ転送
  310. *---------------------------------------------------------------------------------------*
  311.     .if KoPI
  312. trans
  313.         move.l    addr(a6),a0
  314.         move.l    gbuff(a6),a1
  315.         lea    2048(a1),a1
  316.  
  317.         move.w    line(a6),d0
  318.         cmp.w    ywid(a6),d0
  319.         bge    transsmall
  320.                         * 拡大
  321.         move.w    ywid(a6),d0
  322.         move.w    d0,d1
  323.         subq.l    #1,d1
  324. transbig_lop
  325.         sub.w    line(a6),d0
  326.         bmi    transb0
  327.  
  328.         bsr    trans_line
  329.         dbra    d1,transbig_lop
  330.         bra    trans_end
  331. transb0
  332.         add.w    ywid(a6),d0
  333.         add.w    colum(a6),a1
  334.         bsr    trans_line
  335.         dbra    d1,transbig_lop
  336.         bra    trans_end
  337. **
  338. transsmall
  339.         move.w    ywid(a6),d1
  340.         subq.l    #1,d1
  341.         clr.w    d0
  342. transsmall_lop
  343.         sub.w    ywid(a6),d0
  344.         bmi    transs0
  345.         add.w    colum(a6),a1
  346.         bra    transsmall_lop
  347. transs0
  348.         add.w    line(a6),d0
  349.         bsr    trans_line
  350.         add.w    colum(a6),a1
  351.         dbra    d1,transsmall_lop
  352. trans_end
  353.         rts
  354.  
  355. trans_line
  356.         move.l    a0,a3
  357.         lea    2048(a0),a0
  358.         move.l    a1,a2
  359.         moveq.l    #0,d5
  360.         move.w    colum(a6),d3
  361.         cmp.w    xwid(a6),d3
  362.         beq    trans_line_eq
  363.         bgt    trans_line_small
  364.                         * 拡大
  365.         move.w    xwid(a6),d3
  366.         move.w    d3,d4
  367.         subq.l    #1,d4
  368. trans_lb_lop
  369.         sub.w    colum(a6),d3
  370.         bmi    translb0
  371.  
  372.         move.b    (a2),d5
  373.         move.w    d5,(a3)+
  374.  
  375.         dbra    d4,trans_lb_lop
  376.         rts
  377. translb0
  378.         add.w    xwid(a6),d3
  379.         addq.l    #1,a2
  380.         move.b    (a2),d5
  381.         move.w    d5,(a3)+
  382.  
  383.         dbra    d4,trans_lb_lop
  384.         rts
  385. **
  386. trans_line_small
  387.         move.w    xwid(a6),d4
  388.         subq.l    #1,d4
  389.         clr.w    d3
  390. trans_ls_lop
  391.         sub.w    xwid(a6),d3
  392.         bmi    transls0
  393.  
  394.         addq.l    #1,a2
  395.         bra    trans_ls_lop
  396. transls0
  397.         add.w    colum(a6),d3
  398.         move.b    (a2),d5
  399.         move.w    d5,(a3)+
  400.         addq.l    #1,a2
  401.         dbra    d4,trans_ls_lop
  402.         rts
  403. **
  404. trans_line_eq
  405.         move.w    colum(a6),d3
  406.         move.l    a2,d4
  407.         and.w    #1,d4
  408.         bne    trans_line_eq02
  409.         and.w    #$fff0,d3
  410.  
  411.         lsr.w    #4,d3
  412.         beq    trans_line_eq0
  413.         subq.l    #1,d3
  414. trans_line_eql
  415.         movem.l    (a2)+,d4/d5/d6/d7
  416.         movep.l    d4,1(a3)
  417.         movep.l    d5,9(a3)
  418.         movep.l    d6,17(a3)
  419.         movep.l    d7,25(a3)
  420.         lea    32(a3),a3
  421.         dbra    d3,trans_line_eql
  422. trans_line_eq0
  423.         moveq.l    #0,d5
  424.         move.w    colum(a6),d3
  425.         and.w    #15,d3
  426.         beq    trans_line_eqe
  427. trans_line_eq02
  428.         subq.l    #1,d3
  429. trans_line_eq0l
  430.         move.b    (a2)+,d5
  431.         move.w    d5,(a3)+
  432.         dbra    d3,trans_line_eq0l
  433. trans_line_eqe
  434.         rts
  435.     .endif
  436. *---------------------------------------------------------------------------------------*
  437. set_crt
  438.     .if KoPI
  439.         move.w    #-1,-(sp)
  440.         move.w    #16,-(sp)
  441.         dc.w    $ff23
  442.         addq.l    #4,sp
  443.         cmp.w    #1,d0            モードチェック
  444.         bne    set_crt0
  445.  
  446.         move.w    $e80028,d0        うそチェック
  447.         and.w    #$700,d0
  448.         cmp.w    #$400,d0
  449.         beq    set_crt1
  450. set_crt0
  451.         move.w    #1,-(sp)
  452.         move.w    #16,-(sp)
  453.         .dc.w    $ff23            conctrl 768*512.16color
  454.         addq.l    #4,sp
  455. set_crt1
  456.         rts
  457.     .endif
  458. *---------------------------------------------------------------------------------------*
  459.     .if 0
  460.     .if KoPI.eq.0
  461.         .xdef    _SetPal
  462. _SetPal:
  463.         movem.l    d0-d7/a0-a6,-(sp)
  464.         lea    data(pc),a6
  465.         clr.l    -(sp)
  466.         .dc.w    $ff20
  467.         move.l    d0,(sp)
  468.     .endif
  469. set_pal
  470.         lea    palette(a6),a0
  471.         lea    $e82000,a1
  472.         move.w    #16-1,d4
  473. set_pal_lop
  474.         moveq.l    #0,d1
  475.         move.b    (a0)+,d1
  476.         mulu    tone(a6),d1
  477.         divu    #100,d1
  478.         moveq.l    #0,d0
  479.         move.b    (a0)+,d0
  480.         mulu    tone(a6),d0
  481.         divu    #100,d0
  482.         moveq.l    #0,d2
  483.         move.b    (a0)+,d2
  484.         mulu    tone(a6),d2
  485.         divu    #100,d2
  486.         lsl.w    #8,d0
  487.         and.w    #$f800,d0
  488.         lsl.w    #3,d1
  489.         and.w    #$7c0,d1
  490.         lsr.w    #2,d2
  491.         and.w    #$3f,d2
  492.         or.w    d1,d0
  493.         or.w    d2,d0
  494.         move.w    d0,(a1)+
  495.         dbra    d4,set_pal_lop
  496.     .if KoPI.eq.0
  497.         .dc.w    $ff20
  498.         addq.l    #4,sp
  499.         movem.l    (sp)+,d0-d7/a0-a6
  500.     .endif
  501.         rts
  502.     .endif
  503.  
  504. *---------------------------------------------------------------------------------------*
  505. com_disp
  506.     .if KoPI
  507.         clr.w    -(sp)
  508.         pea    2
  509.         move.w    file(a6),-(sp)
  510.         dc.w    $ff42        *seek
  511.         addq.l    #8,sp
  512.         bmi    file_error
  513.         move.w    #2,-(sp)
  514.         move.w    #10,-(sp)
  515.         .dc.w    $ff23
  516.         move.w    #25,-(sp)
  517.         clr.w    -(sp)
  518.         move.w    #3,-(sp)
  519.         .dc.w    $ff23
  520.         lea    10(sp),sp
  521.     .endif
  522. com_disp_lop
  523.     .if KoPI
  524.         bsr    getc
  525.         cmp.b    #26,d0
  526.         beq    com_disp_end
  527.  
  528.         move.w    d0,-(sp)
  529.         .dc.w    $ff02        putchar
  530.         addq.l    #2,sp
  531.         bra    com_disp_lop
  532.     .endif
  533. com_disp_end
  534.         rts
  535.  
  536. *---------------------------------------------------------------------------------------*
  537. expand_one
  538.         move.l    gbuff(a6),a2
  539.         lea    2048(a2),a2
  540.         move.w    line(a6),d4
  541.         mulu    colum(a6),d4
  542.         add.l    a2,d4
  543.         clr.w    d0
  544. expand_one_lop
  545.         lea    ret_one(pc),a4
  546.         bra    read_color
  547. ret_one
  548.         move.b    d0,(a2)+
  549.         cmp.l    d4,a2
  550.         blt    expand_one_lop
  551.         rts
  552.  
  553. *---------------------------------------------------------------------------------------*
  554. expand:
  555.         cmp.w    #2,colum(a6)
  556.         ble    expand_one
  557.  
  558.         move.l    gbuff(a6),a2
  559.         clr.w    d0
  560.         lea    ret0(pc),a4
  561.         bra    read_color
  562. ret0
  563.         move.w    d0,d1
  564.         lea    ret1(pc),a4
  565.         bra    read_color
  566. ret1
  567.         move.w    #1024-1,d2        * 1024 fixed
  568. expand0
  569.         move.b    d1,(a2)+
  570.         move.b    d0,(a2)+
  571.         dbra    d2,expand0
  572.         move.l    a2,d4
  573.         move.w    line(a6),d5
  574.  
  575.         mulu    colum(a6),d5
  576.         add.l    d5,d4
  577.         moveq.l    #-1,d5
  578.         bra.b    expand_lop0
  579. expand_lop
  580.         cmpa.l    d4,a2
  581.         bge    expand_end
  582. expand_lop0
  583.         sub.w    #2,d7
  584.         bge    expand9
  585.  
  586.         addq.w    #1,d7
  587.         beq.b    expand100
  588.  
  589.         move.w    #14,d7
  590.         add.l    d6,d6
  591.  
  592.         subq.l    #2,buff_lest(a6)
  593.         bgt.b    expand101
  594.         bsr    buff_read
  595. expand101
  596.         move.w    (a5)+,d6
  597.         add.l    d6,d6
  598.         move.l    d6,d0
  599.         swap    d0
  600.         and.w    #3,d0
  601.         cmp.w    #3,d0
  602.         bne    expand1
  603.         bra    expand200
  604. expand100
  605.         move.w    #15,d7
  606.         add.l    d6,d6
  607.         add.l    d6,d6
  608.         subq.l    #2,buff_lest(a6)
  609.         bgt.b    expand102
  610.         bsr    buff_read
  611. expand102
  612.         move.w    (a5)+,d6
  613.  
  614.         move.l    d6,d0
  615.         swap    d0
  616.         and.w    #3,d0
  617.         cmp.w    #3,d0
  618.         bne    expand1
  619. expand200
  620. ** 1 bit load
  621.         add.w    d6,d6
  622.         dbcc    d7,ex0
  623.         dbcs    d7,ex3
  624.         bcc.b    ex2
  625.         moveq.l    #15,d7
  626.         subq.l    #2,buff_lest(a6)
  627.         bgt.b    ex1
  628.         bsr    buff_read
  629. ex1
  630.         move.w    (a5)+,d6
  631. ex0
  632.         cmp.w    #4,d5
  633.         beq    exx
  634.         moveq.l    #4,d5
  635.         bra    load_length
  636. ex2
  637.         moveq.l    #15,d7
  638.         subq.l    #2,buff_lest(a6)
  639.         bgt.b    ex4
  640.         bsr    buff_read
  641. ex4
  642.         move.w    (a5)+,d6
  643. ex3
  644.         cmp.w    #3,d5
  645.         beq    exx
  646.         moveq.l    #3,d5
  647.         bra    load_length
  648. expand9
  649.         rol.w    #2,d6
  650.         move.w    d6,d0
  651. expand10
  652.         and.w    #3,d0
  653.         cmp.w    #3,d0
  654.         beq    expand200
  655. expand1
  656.         cmp.w    d5,d0
  657.         bne    expand3
  658. exx
  659.         moveq.l    #-1,d5
  660.         moveq.l    #0,d0
  661.  
  662.         lea    ret3(pc),a3
  663.         move.l    a3,d2
  664.         lea    ret2(pc),a3
  665. expand21
  666.         move.b    -1(a2),d0
  667. expand20
  668.         move.l    a3,a4
  669. *    bra    read_color
  670.         lsl.w    #5,d0
  671.         lea    30(a6,d0.w),a0
  672.  
  673.         add.w    d6,d6
  674.         dbcc    d7,abc0
  675.         dbcs    d7,read_col0
  676.         bcc    re0
  677.         moveq.l    #15,d7
  678.         subq.l    #2,buff_lest(a6)
  679.         bgt.b    abc1
  680.         bsr    buff_read
  681. abc1
  682.         move.w    (a5)+,d6
  683. abc0
  684.         add.w    d6,d6
  685.         dbcs    d7,abc2
  686.         dbcc    d7,abc5
  687.         bcs    abc4
  688.  
  689.         moveq.l    #15,d7
  690.         subq.l    #2,buff_lest(a6)
  691.         bgt.b    abc3
  692.         bsr    buff_read
  693. abc3
  694.         move.w    (a5)+,d6
  695. abc2
  696.         move.w    (a0),d0
  697.         jmp    (a4)
  698. abc4
  699.         moveq.l    #15,d7
  700.         subq.l    #2,buff_lest(a6)
  701.         bgt.b    abc6
  702.         bsr    buff_read
  703. abc6
  704.         move.w    (a5)+,d6
  705. abc5
  706.         move.l    -2(a0),d0
  707.         swap    d0
  708.         move.l    d0,-2(a0)
  709. *--
  710. ret2
  711.         move.b    d0,(a2)+
  712.         move.l    d2,a4
  713. *    bra    read_color
  714.         lsl.w    #5,d0
  715.         lea    30(a6,d0.w),a0
  716.  
  717.         add.w    d6,d6
  718.         dbcc    d7,abc00
  719.         dbcs    d7,read_col0
  720.         bcc    re0
  721.         moveq.l    #15,d7
  722.         subq.l    #2,buff_lest(a6)
  723.         bgt.b    abc10
  724.         bsr    buff_read
  725. abc10
  726.         move.w    (a5)+,d6
  727. abc00
  728.         add.w    d6,d6
  729.         dbcs    d7,abc20
  730.         dbcc    d7,abc50
  731.         bcs    abc40
  732.  
  733.         moveq.l    #15,d7
  734.         subq.l    #2,buff_lest(a6)
  735.         bgt.b    abc30
  736.         bsr    buff_read
  737. abc30
  738.         move.w    (a5)+,d6
  739. abc20
  740.         move.w    (a0),d0
  741.         jmp    (a4)
  742. abc40
  743.         moveq.l    #15,d7
  744.         subq.l    #2,buff_lest(a6)
  745.         bgt.b    abc60
  746.         bsr    buff_read
  747. abc60
  748.         move.w    (a5)+,d6
  749. abc50
  750.         move.l    -2(a0),d0
  751.         swap    d0
  752.         move.l    d0,-2(a0)
  753. ret3
  754.         move.b    d0,(a2)+
  755. ** 1 bit load
  756.         add.w    d6,d6
  757.         dbcc    d7,expand20
  758.         dbcs    d7,expand_lop
  759.         bcc.b    ex20
  760.         moveq.l    #15,d7
  761.         subq.l    #2,buff_lest(a6)
  762.         bgt.b    ex30
  763.         bsr    buff_read
  764. ex30
  765.         move.w    (a5)+,d6
  766.         bra    expand21
  767. ex20
  768.         moveq.l    #15,d7
  769.         subq.l    #2,buff_lest(a6)
  770.         bgt.b    ex40
  771.         bsr    buff_read
  772. ex40
  773.         move.w    (a5)+,d6
  774.         bra    expand_lop
  775. expand3
  776.         move.w    d0,d5
  777. *
  778. *    長さをロード
  779. *
  780. load_length
  781.         add.w    d6,d6
  782.         dbcs    d7,expandx
  783.         dbcc    d7,load_len00
  784.         bcc    load_len01
  785.  
  786.         moveq.l    #15,d7
  787.         subq.l    #2,buff_lest(a6)
  788.         bgt.b    load_len11
  789.         bsr    buff_read
  790. load_len11
  791.         move.w    (a5)+,d6
  792. load_len00
  793.         move.l    d7,d2
  794.         dbra    d7,load_len0
  795. load_len3
  796.         moveq.l    #15,d7
  797.         add.w    #16,d2
  798.         subq.l    #2,buff_lest(a6)
  799.         bgt.b    load_len1
  800.         bsr    buff_read
  801. load_len1
  802.         move.w    d6,d0
  803.         move.w    (a5)+,d6
  804.         add.w    d0,d0
  805.         bcc.b    load_len2
  806.         subq.l    #1,d7
  807. load_len0
  808.         add.w    d6,d6
  809.         dbcc    d7,load_len0
  810.         bcs.b    load_len3
  811. load_len2
  812.         moveq.l    #1,d3
  813.         sub.l    d7,d2
  814. load_len4
  815.         lsl.l    d2,d3
  816. *
  817. load_len5
  818.         sub.w    d2,d7
  819.         bge    load_len6
  820.  
  821.         add.w    d2,d7
  822.         addq.w    #1,d7
  823.         and.l    #$ffff,d6
  824.         lsl.l    d7,d6
  825.         sub.w    d7,d2
  826.         move.w    d2,d7
  827.         subq.l    #2,buff_lest(a6)
  828.         bgt.b    load_len8        必要があれば次のバッファ読む
  829.         bsr    buff_read
  830. load_len8
  831.         move.w    (a5)+,d6
  832.         lsl.l    d7,d6
  833.         neg.w    d7
  834.         add.w    #15,d7
  835.         move.l    d6,d2
  836.         swap    d2
  837.         add.w    d2,d3
  838.         subq.l    #1,d3
  839.         beq    expandx
  840.         move.w    d5,d0
  841.         add.w    d0,d0
  842.         bra    patp0
  843. *        jmp    Pload_len(pc,d0.w)
  844. load_len6
  845.         swap    d6
  846.         clr.w    d6
  847.         rol.l    d2,d6
  848.         add.w    d6,d3
  849.         swap    d6
  850. load_len_end
  851. **
  852.         subq.l    #1,d3
  853.         move.w    d5,d0
  854.         add.w    d0,d0
  855. patp0
  856.         jmp    Pload_len(pc,d0.w)
  857. OPload_len
  858.         bra.b    expand_1
  859.         bra.b    oexpand_2
  860.         bra.b    expand_3d
  861.         bra.b    oexpand_4
  862. oexpand_5
  863. pat1
  864.         lea    -641(a2),a3
  865. oexpand5_lop
  866.         move.w    (a3)+,(a2)+
  867.         dbra    d3,oexpand5_lop
  868.         sub.l    #$10000,d3
  869.         bmi    expand_lop
  870.         bra.b    oexpand5_lop
  871. *
  872. oexpand_2
  873. pat2
  874.         lea    -640(a2),a3
  875. oexpand2_lop
  876.         move.b    (a3)+,(a2)+
  877.         move.b    (a3)+,(a2)+
  878.         dbra    d3,oexpand2_lop
  879.         sub.l    #$10000,d3
  880.         bmi    expand_lop
  881.         bra.b    oexpand2_lop
  882. **
  883. oexpand_4
  884. pat3
  885.         lea    -639(a2),a3
  886. oexpand4_lop
  887.         move.w    (a3)+,(a2)+
  888.         dbra    d3,oexpand4_lop
  889.         sub.l    #$10000,d3
  890.         bmi    expand_lop
  891.         bra.b    oexpand4_lop
  892. *--
  893. Pload_len
  894.         bra.b    expand_1
  895.         bra.b    expand_2
  896.         bra.b    expand_3
  897.         bra.b    expand_4d
  898. expand_5
  899. pat4
  900.         lea    -641(a2),a3
  901. expand5_lop
  902.         move.b    (a3)+,(a2)+
  903.         move.b    (a3)+,(a2)+
  904.         dbra    d3,expand5_lop
  905.         sub.l    #$10000,d3
  906.         bmi    expand_lop
  907.         bra.b    expand5_lop
  908. **
  909. expand_3d    bra    expand_3
  910. expand_4d    bra    expand_4
  911. **
  912. expand_1
  913.         move.w    -2(a2),d0
  914.         cmp.b    -2(a2),d0
  915.         bne.b    expand11
  916. expand10_lop
  917.         move.w    d0,(a2)+
  918.         dbra    d3,expand10_lop
  919.         sub.l    #$10000,d3
  920.         bmi    expand_lop
  921.         bra.b    expand10_lop
  922. expand11
  923.         move.w    -4(a2),d1
  924. expand11_lop
  925.         move.w    d1,(a2)+
  926.         dbra    d3,expand110
  927.         sub.l    #$10000,d3
  928.         bmi    expand_lop
  929. expand110
  930.         move.w    d0,(a2)+
  931.         dbra    d3,expand11_lop
  932.         sub.l    #$10000,d3
  933.         bmi    expand_lop
  934.         bra.b    expand11_lop
  935. **
  936. expand_2
  937. pat5
  938.         lea    -640(a2),a3
  939. expand2_lop
  940.         move.w    (a3)+,(a2)+
  941.         dbra    d3,expand2_lop
  942.         sub.l    #$10000,d3
  943.         bmi    expand_lop
  944.         bra.b    expand2_lop
  945. **
  946. expand_3
  947. pat6
  948.         lea    -1280(a2),a3
  949. expand3_lop
  950.         move.w    (a3)+,(a2)+
  951.         dbra    d3,expand3_lop
  952.         sub.l    #$10000,d3
  953.         bmi    expand_lop
  954.         bra.b    expand3_lop
  955. **
  956. expand_4
  957. pat7
  958.         lea    -639(a2),a3
  959. expand4_lop
  960.         move.b    (a3)+,(a2)+
  961.         move.b    (a3)+,(a2)+
  962.         dbra    d3,expand4_lop
  963.         sub.l    #$10000,d3
  964.         bmi    expand_lop
  965.         bra.b    expand4_lop
  966. **
  967. expand_end
  968.         rts
  969. *-
  970. load_len01
  971.         moveq.l    #15,d7
  972.         subq.l    #2,buff_lest(a6)
  973.         bgt.b    load_len02
  974.         bsr    buff_read
  975. load_len02
  976.         move.w    (a5)+,d6
  977. *-
  978. expandx
  979.         move.w    d5,d0
  980.         add.w    d0,d0
  981. patp1
  982.         jmp    Pload_lenx(pc,d0.w)
  983. OPload_lenx
  984.         bra.b    expand_1x
  985.         bra.b    oexpand_2x
  986.         bra.b    expand_3x
  987.         bra.b    oexpand_4x
  988. oexpand_5x
  989. pat8
  990.         move.w    -641(a2),(a2)+
  991.         bra    expand_lop
  992. oexpand_2x
  993. pat9
  994.         move.b    -640(a2),(a2)+
  995. pat10
  996.         move.b    -640(a2),(a2)+
  997.         bra    expand_lop
  998. oexpand_4x
  999. pat11
  1000.         move.w    -639(a2),(a2)+
  1001.         bra    expand_lop
  1002.  
  1003. *--------------
  1004. Pload_lenx
  1005.         bra.b    expand_1x
  1006.         bra.b    expand_2x
  1007.         bra.b    expand_3x
  1008.         bra.b    expand_4x
  1009. expand_5x
  1010. pat12
  1011.         move.b    -641(a2),(a2)+
  1012. pat13
  1013.         move.b    -641(a2),(a2)+
  1014.         bra    expand_lop
  1015. expand_1x
  1016.         move.w    -2(a2),d0
  1017.         cmp.b    -2(a2),d0
  1018.         bne.b    expand_10x
  1019.         move.w    d0,(a2)+
  1020.         bra    expand_lop
  1021. expand_10x
  1022.         move.w    -4(a2),(a2)+
  1023.         bra    expand_lop
  1024. expand_2x
  1025. pat14
  1026.         move.w    -640(a2),(a2)+
  1027.         bra    expand_lop
  1028. expand_3x
  1029. pat15
  1030.         move.w    -1280(a2),(a2)+
  1031.         bra    expand_lop
  1032. expand_4x
  1033. pat16
  1034.         move.b    -639(a2),(a2)+
  1035. pat17
  1036.         move.b    -639(a2),(a2)+
  1037.         bra    expand_lop
  1038.  
  1039. *---------------------------------------------------------------------------------------*
  1040. *    カラーテーブルの初期化
  1041. *---------------------------------------------------------------------------------------*
  1042. color_initialize
  1043.         move.l    a6,a0
  1044.         moveq.l    #1,d1
  1045. col_ini0
  1046.         move.w    d1,d0
  1047.         moveq.l    #16-1,d2
  1048. col_ini1
  1049.         and.w    #15,d0
  1050.         move.w    d0,(a0)+
  1051.         addq.l    #1,d0
  1052.         dbra    d2,col_ini1
  1053.         addq.l    #1,d1
  1054.         cmp.w    #16,d1
  1055.         ble    col_ini0
  1056.         rts
  1057.  
  1058. *---------------------------------------------------------------------------------------*
  1059. read_color
  1060.         lsl.w    #5,d0
  1061.         lea    30(a6,d0.w),a0
  1062.  
  1063.         add.w    d6,d6
  1064.         dbcc    d7,re2
  1065.         dbcs    d7,read_col0
  1066.         bcc    re0
  1067. Xread_col
  1068.         moveq.l    #15,d7
  1069.         subq.l    #2,buff_lest(a6)
  1070.         bgt.b    re21
  1071.         bsr    buff_read
  1072. re21
  1073.         move.w    (a5)+,d6
  1074. re2
  1075.         add.w    d6,d6
  1076.         dbcs    d7,re40
  1077.         dbcc    d7,read_col3
  1078.         bcs    re41
  1079.  
  1080.         moveq.l    #15,d7
  1081.         subq.l    #2,buff_lest(a6)
  1082.         bgt.b    re42
  1083.         bsr    buff_read
  1084. re42
  1085.         move.w    (a5)+,d6
  1086. re40
  1087.         move.w    (a0),d0
  1088.         jmp    (a4)
  1089. re41
  1090.         moveq.l    #15,d7
  1091.         subq.l    #2,buff_lest(a6)
  1092.         bgt.b    re43
  1093.         bsr    buff_read
  1094. re43
  1095.         move.w    (a5)+,d6
  1096. read_col3
  1097.         move.l    -2(a0),d0
  1098.         swap    d0
  1099.         move.l    d0,-2(a0)
  1100.         jmp    (a4)
  1101. **
  1102. re0
  1103.         moveq.l    #15,d7
  1104.         subq.l    #2,buff_lest(a6)
  1105.         bgt.b    re00
  1106.         bsr    buff_read
  1107. re00
  1108.         move.w    (a5)+,d6
  1109. read_col0
  1110.         add.w    d6,d6
  1111.         dbcc    d7,read_col1
  1112.         dbcs    d7,recx0
  1113.         bcs    recx1
  1114.         moveq.l    #15,d7
  1115.         subq.l    #2,buff_lest(a6)
  1116.         bgt.b    recx3
  1117.         bsr    buff_read
  1118. recx3
  1119.         move.w    (a5)+,d6
  1120. recx0
  1121.         add.w    d6,d6
  1122.         dbcc    d7,read_col5
  1123.         dbcs    d7,recx4
  1124.         bcs.b    recx5
  1125.  
  1126.         moveq.l    #15,d7
  1127.         subq.l    #2,buff_lest(a6)
  1128.         bgt.b    recx7
  1129.         bsr    buff_read
  1130. recx7
  1131.         move.w    (a5)+,d6
  1132. recx4
  1133.         move.w    -4(a0),d0
  1134.         move.l    -2(a0),-4(a0)
  1135.         move.w    d0,(a0)
  1136.         jmp    (a4)
  1137. recx5
  1138.         moveq.l    #15,d7
  1139.         subq.l    #2,buff_lest(a6)
  1140.         bgt.b    recx6
  1141.         bsr    buff_read
  1142. recx6
  1143.         move.w    (a5)+,d6
  1144. read_col5
  1145.         move.w    -6(a0),d0
  1146.         move.l    -4(a0),-6(a0)
  1147.         move.w    (a0),-2(a0)
  1148.         move.w    d0,(a0)
  1149.         jmp    (a4)
  1150. recx1
  1151.         moveq.l    #15,d7
  1152.         subq.l    #2,buff_lest(a6)
  1153.         bgt.b    recx2
  1154.         bsr    buff_read
  1155. recx2
  1156.         move.w    (a5)+,d6
  1157. read_col1
  1158.         add.w    d6,d6
  1159.         dbcc    d7,rec0
  1160.         dbcs    d7,rec1
  1161.         bcc.b    rec2
  1162.         moveq.l    #15,d7
  1163.         subq.l    #2,buff_lest(a6)
  1164.         bgt.b    rec3
  1165.         bsr    buff_read
  1166. rec3
  1167.         move.w    (a5)+,d6
  1168. rec0
  1169.         subq.w    #3,d7
  1170.         bge.b    rec10
  1171.  
  1172.         addq.w    #4,d7
  1173.         and.l    #$ffff,d6
  1174.         lsl.l    d7,d6
  1175.         subq.w    #3,d7
  1176.         neg.w    d7
  1177.         subq.l    #2,buff_lest(a6)
  1178.         bgt.b    rec11
  1179.         bsr    buff_read
  1180. rec11
  1181.         move.w    (a5)+,d6
  1182.         lsl.l    d7,d6
  1183.         neg.w    d7
  1184.         add.w    #15,d7
  1185.         move.l    d6,d3
  1186.         swap    d3
  1187.         and.w    #7,d3
  1188.         bra    getcol
  1189. rec10
  1190.         rol.w    #3,d6
  1191.         moveq.l    #7,d3
  1192.         and.w    d6,d3
  1193. getcol
  1194.         add.w    d3,d3
  1195.         sub.w    d3,a0
  1196.         lea    -16(a0),a0
  1197.         lea    2(a0),a1
  1198.         move.w    (a0),d0
  1199.         neg.w    d3
  1200.         jmp    getcol1(pc,d3.w)
  1201.  
  1202.         move.w    (a1)+,(a0)+
  1203.         move.w    (a1)+,(a0)+
  1204.         move.w    (a1)+,(a0)+
  1205.         move.w    (a1)+,(a0)+
  1206.         move.w    (a1)+,(a0)+
  1207.         move.w    (a1)+,(a0)+
  1208.         move.w    (a1)+,(a0)+
  1209. getcol1
  1210.         move.l    (a1)+,(a0)+
  1211.         move.l    (a1)+,(a0)+
  1212.         move.l    (a1)+,(a0)+
  1213.         move.l    (a1)+,(a0)+
  1214.         move.w    d0,(a0)
  1215.         jmp    (a4)
  1216. *-
  1217. rec2
  1218.         moveq.l    #15,d7
  1219.         subq.l    #2,buff_lest(a6)
  1220.         bgt.b    rec4
  1221.         bsr    buff_read
  1222. rec4
  1223.         move.w    (a5)+,d6
  1224. rec1
  1225.         sub.w    #2,d7
  1226.         bge.b    rec8
  1227.  
  1228.         addq.w    #1,d7
  1229.         beq.b    rec5
  1230.  
  1231.         move.w    #14,d7
  1232.         add.l    d6,d6
  1233.  
  1234.         subq.l    #2,buff_lest(a6)
  1235.         bgt.b    rec6
  1236.         bsr    buff_read
  1237. rec6
  1238.         move.w    (a5)+,d6
  1239.         add.l    d6,d6
  1240.         move.l    d6,d3
  1241.         swap    d3
  1242.         bra.b    rec9
  1243. rec5
  1244.         move.w    #15,d7
  1245.         add.l    d6,d6
  1246.         add.l    d6,d6
  1247.         subq.l    #2,buff_lest(a6)
  1248.         bgt.b    rec7
  1249.         bsr    buff_read
  1250. rec7
  1251.         move.w    (a5)+,d6
  1252.         move.l    d6,d3
  1253.         swap    d3
  1254.         bra.b    rec9
  1255. rec8
  1256.         rol.w    #2,d6
  1257.         move.w    d6,d3
  1258. rec9
  1259.         and.w    #3,d3
  1260.         add.w    d3,d3
  1261.         sub.w    d3,a0
  1262.         subq.l    #8,a0
  1263.         lea    2(a0),a1
  1264.         move.w    (a0),d0
  1265.         neg.w    d3
  1266.         jmp    getcolB(pc,d3.w)
  1267.  
  1268.         move.w    (a1)+,(a0)+
  1269.         move.w    (a1)+,(a0)+
  1270.         move.w    (a1)+,(a0)+
  1271. getcolB
  1272.         move.l    (a1)+,(a0)+
  1273.         move.l    (a1)+,(a0)+
  1274.         move.w    d0,(a0)
  1275.         jmp    (a4)
  1276.  
  1277. *---------------------------------------------------------------------------------------*
  1278. *    ビット読み込み                                    *
  1279. *    in        d0 = bits length                        *
  1280. *    out        d0 = data                            *
  1281. *---------------------------------------------------------------------------------------*
  1282.  
  1283. load_bit
  1284.         sub.w    d0,d7            ビットポイントチェック
  1285.         blt.b    load_bit_a
  1286.         swap    d6
  1287.         clr.w    d6
  1288.         rol.l    d0,d6
  1289.         move.w    d6,d0
  1290.         swap    d6
  1291.         rts
  1292. load_bit_a
  1293.         add.w    d0,d7
  1294.         addq.w    #1,d7
  1295.         and.l    #$ffff,d6
  1296.         lsl.l    d7,d6
  1297.         sub.w    d7,d0
  1298.         move.w    d0,d7
  1299.         subq.l    #2,buff_lest(a6)
  1300.         bgt.b    load_bit0        必要があれば次のバッファ読む
  1301.         bsr    buff_read
  1302. load_bit0
  1303.         move.w    (a5)+,d6
  1304.         lsl.l    d7,d6
  1305.         neg.w    d7
  1306.         add.w    #15,d7
  1307.         move.l    d6,d0
  1308.         swap    d0
  1309. load_bit_e
  1310.         rts
  1311.  
  1312. *---------------------------------------------------------------------------------------*
  1313. *    1ワード読む
  1314. *---------------------------------------------------------------------------------------*
  1315. getw
  1316.         bsr    getc
  1317.         lsl.w    #8,d0
  1318.         move.w    d0,-(sp)
  1319.         bsr    getc
  1320.         move.b    d0,1(sp)
  1321.         move.w    (sp)+,d0
  1322.         rts
  1323.  
  1324. *---------------------------------------------------------------------------------------*
  1325. *    1バイト読む
  1326. *---------------------------------------------------------------------------------------*
  1327. getc
  1328.         move.w    file(a6),-(sp)
  1329.         dc.w    $ff1b
  1330.         addq.l    #2,sp
  1331.         tst.l    d0
  1332.         bmi    file_error
  1333.         rts
  1334.  
  1335. *---------------------------------------------------------------------------------------*
  1336. *    バッファ読む
  1337. *---------------------------------------------------------------------------------------*
  1338. *
  1339. buff_read
  1340.         move.l    buff_addr(a6),a5
  1341.         move.l    buff_size(a6),-(sp)
  1342.         move.l    buff_addr(a6),-(sp)
  1343.         move.w    file(a6),-(sp)
  1344.         dc.w    _READ
  1345.         lea    10(sp),sp
  1346.         move.l    d0,buff_lest(a6)
  1347.         bmi    file_error
  1348.         rts
  1349.  
  1350. *---------------------------------------------------------------------------------------*
  1351. *    読み込みのための用意                                *
  1352. *---------------------------------------------------------------------------------------*
  1353. *
  1354. read_ready
  1355.         bsr    buff_read
  1356.         move.w    (a5)+,d6
  1357.         rts
  1358.  
  1359. *---------------------------------------------------------------------------------------*
  1360. *    バッファをセットします。                            *
  1361. *---------------------------------------------------------------------------------------*
  1362. *
  1363. * in        d0 = buff size
  1364. * out        a0 = buff address
  1365. *
  1366. buffer_set
  1367.         and.l    #$ffff_fffe,d0
  1368.         cmp.l    #128,d0
  1369.         blt    buff_error
  1370.         move.l    d0,buff_size(a6)
  1371.         move.l    d0,buff_lest(a6)
  1372.         move.l    a0,buff_addr(a6)
  1373.         move.l    a0,buff_point(a6)
  1374.         moveq.l    #15,d7
  1375.         rts
  1376.  
  1377. *---------------------------------------------------------------------------------------*
  1378.  
  1379. file_error
  1380.         bra    global_exit
  1381. size_error
  1382.         move.l    #-35,d0
  1383.         bra    global_exit
  1384. buff_error
  1385.         move.l    #-8,d0
  1386.         bra    global_exit
  1387. no_pi
  1388.         move.l    #-31,d0
  1389.         bra    global_exit
  1390. no_support
  1391.         move.l    #-32,d0
  1392.     .if KoPI
  1393.         bra    global_exit
  1394.     .endif
  1395. global_exit
  1396.         move.l    stk(a6),sp
  1397.         rts
  1398.  
  1399. *---------------------------------------------------------------------------------------*
  1400.         .offset        0
  1401.  
  1402. color_tab:    .ds.w    16*16
  1403. start_addr:    .ds.l    1
  1404. ritu0:        .ds.w    1
  1405. ritu1:        .ds.w    1
  1406. xwid:        .ds.w    1
  1407. ywid:        .ds.w    1
  1408. addr:        .ds.l    1
  1409. colum:        .ds.w    1
  1410. line:        .ds.w    1
  1411. opt:        .ds.w    1
  1412. tone:        .ds.w    1
  1413. stk:        .ds.l    1
  1414. file:        .ds.l    1
  1415. file_name:    .ds.l    1
  1416. buff_size:    .ds.l    1
  1417. buff_lest:    .ds.l    1
  1418. buff_addr:    .ds.l    1
  1419. buff_point:    .ds.l    1
  1420. gbuff:        .ds.l    1
  1421. palette:    .ds.b    16*3
  1422.         .even
  1423. size_of_data:
  1424.         .text
  1425. data:
  1426.         .ds.b    size_of_data
  1427.  
  1428. _Pi_PaletteBuff    equ    data+palette
  1429. _ToneSet    equ    data+tone
  1430.  
  1431. rewrite_table
  1432.         .dc.w    pat1-data,1
  1433.         .dc.w    pat2-data,0
  1434.         .dc.w    pat3-data,-1
  1435.         .dc.w    pat4-data,1
  1436.         .dc.w    pat5-data,0
  1437.         .dc.w    pat7-data,-1
  1438.         .dc.w    pat8-data,1
  1439.         .dc.w    pat9-data,0
  1440.         .dc.w    pat10-data,0
  1441.         .dc.w    pat11-data,-1
  1442.         .dc.w    pat12-data,1
  1443.         .dc.w    pat13-data,1
  1444.         .dc.w    pat14-data,0
  1445.         .dc.w    pat16-data,-1
  1446.         .dc.w    pat17-data,-1
  1447.         .dc.w    0
  1448.  
  1449.  
  1450.         .end
  1451.  
  1452.